#pragma once

#include "IScene.h"
#include "..\RenderEngineUtils\Camera.h"
#include "Blur.h"
#include "ShadowMapper.h"
#include "Ground.h"
#include "MultiModel.h"
#include "Managers.h"

class Scene01 : public IScene
{
private:
	Managers *managers;

	Model *garden;
	Ground *ground;
	MultiModel *lamps;
	MultiModel *windows;
	MultiModel *pales;
	MultiModel *trees;

	Animation *anim;

	Camera *scena1camera1;
	Camera *scena1camera5;
	Camera *scena1camera6;
	Camera *scena1camera02;
	Camera *scena1camera03;
	Camera *scena1camera04;

	Camera *currentCam;

	Shader *vpSpecular;
	Shader *fpSpecular;
	Shader *vpDof;
	Shader *fpDof;
	Shader *vpBlur;
	Shader *fpBlur;

	Framebuffer *framebuffer;
	Texture *orTexture;
	DepthTexture *orDepthTexture;
	Blur *blur;

	float lights[3 * 17];
	float lightsTargets[3 * 17];

	float idm[16];
	CGparameter modelMatrix;

	Model *skybox;

	CGparameter cgpSpotLightPos;
	CGparameter cgpSpotLightTargetPos;
	CGparameter cgpFade;

	float fade;
	float fadeMod;

	float futurisaFade;
	float futurisaFadeMod;
	float futurisbFade;
	float futurisbFadeMod;
	float dementiaaFade;
	float dementiaaFadeMod;
	float dementiabFade;
	float dementiabFadeMod;
	float asmcodeFade;
	float asmcodeFadeMod;
	float biterFade;
	float biterFadeMod;
	float lambFade;
	float lambFadeMod;
	float neveeFade;
	float neveeFadeMod;

	void SetLights();
	void SetAnimation();

public:
	Scene01(Managers *managers);
	~Scene01(void);

	void Initialize();

	void Prepare();
	void Render(float ms);
	void Notify(float time, const char *type, const char *value);
};
